home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / etc / bash_completion.d / ri < prev    next >
Text File  |  2009-04-02  |  3KB  |  90 lines

  1. # -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
  2. # ex: ts=8 sw=8 noet filetype=sh
  3. #
  4. # ri completion for Ruby documentation by Ian Macdonald <ian@caliban.org>
  5.  
  6. ri_get_methods()
  7. {
  8.     local regex
  9.  
  10.     if [ "$ri_version" = integrated ]; then
  11.       if [ -z "$separator" ]; then
  12.         regex="(Instance|Class)"
  13.       elif [ "$separator" = "#" ]; then
  14.         regex=Instance
  15.       else
  16.         regex=Class
  17.       fi
  18.  
  19.       COMPREPLY=( ${COMPREPLY[@]} \
  20.         "$( ri ${classes[@]} 2>/dev/null | \
  21.           ruby -ane 'if /^'"$regex"' methods:/.../^------------------|^$/ and \
  22.           /^ / then print $_.split(/, |,$/).grep(/^[^\[]*$/).join("\n"); \
  23.           end' | sort -u )" )
  24.     else
  25.       # older versions of ri didn't distinguish between class/module and
  26.       # instance methods
  27.       COMPREPLY=( ${COMPREPLY[@]} \
  28.         "$( ruby -W0 $ri_path ${classes[@]} | ruby -ane 'if /^-/.../^-/ and \
  29.           ! /^-/ and ! /^ +(class|module): / then \
  30.           print $_.split(/, |,$| +/).grep(/^[^\[]*$/).join("\n"); \
  31.           end' | sort -u )" )
  32.     fi
  33.     COMPREPLY=( $( compgen $prefix -W '${COMPREPLY[@]}' -- $method ) )
  34. }
  35.  
  36. # needs at least Ruby 1.8.0 in order to use -W0
  37. _ri()
  38. {
  39.     local cur class method prefix ri_path ri_version separator IFS
  40.     local -a classes
  41.  
  42.     COMPREPLY=()
  43.     cur=`_get_cword`
  44.  
  45.     ri_path=$(type -p ri)
  46.     # which version of ri are we using?
  47.     # -W0 is required here to stop warnings from older versions of ri
  48.     # from being captured when used with Ruby 1.8.1 and later
  49.     ri_version="$(ruby -W0 $ri_path -v 2>&1)" || ri_version=integrated
  50.     [ "$ri_version" != "${ri_version%200*}" ] && ri_version=integrated
  51.  
  52.     # need to also split on commas
  53.     IFS=$', \n\t'
  54.     if [[ "$cur" == [A-Z]*[#.]* ]]; then
  55.       [[ "$cur" == *#* ]] && separator=# || separator=.
  56.       # we're completing on class and method
  57.       class=${cur%$separator*}
  58.       method=${cur#*$separator}
  59.       classes=( $class )
  60.       prefix="-P $class$separator"
  61.       ri_get_methods 
  62.       return 0
  63.     fi
  64.  
  65.     if [ "$ri_version" = integrated ]; then
  66.       # integrated ri from Ruby 1.9
  67.       classes=( $( ri -c | ruby -ne 'if /^\s*$/..$stdin.eof then \
  68.                       if /, [A-Z]+/ then print; end; end' ) )
  69.     elif [ "$ri_version" = "ri 1.8a" ]; then
  70.       classes=( $( ruby -W0 $ri_path | \
  71.                ruby -ne 'if /^'"'"'ri'"'"' has/..$stdin.eof then \
  72.                  if /^ .*[A-Z]/ then print; end; end' ))
  73.     else
  74.       classes=( $( ruby -W0 $ri_path | \
  75.                ruby -ne 'if /^I have/..$stdin.eof then \
  76.                  if /^ .*[A-Z]/ then print; end; end' ))
  77.     fi
  78.  
  79.     COMPREPLY=( $( compgen -W '${classes[@]}' -- $cur ) )
  80.     if [[ "$cur" == [A-Z]* ]]; then
  81.       # we're completing on class or module alone
  82.       return 0
  83.     fi
  84.  
  85.     # we're completing on methods
  86.     method=$cur
  87.     ri_get_methods
  88. }
  89. complete -F _ri ri
  90.